Wie erstelle ich eine dynamische Bibliothek? 1.) Bennenung Die Bennennung muss einigen Konventionen entsprechen. Als Beispiel möchte ich die Bibliothek bibel bringen: libbibel.so.1 ist die Hauptversion nr 1 Die unterversionen wie 1.1 müssen kompatibel zu der Haupt- version bleiben! So dürfen keine Schnittstellen verändert werden und alle Funktionen / Klassen müssen auch nachher genau die gleiche Funktionalität (ausser Bugs) haben. Erlaubt sind: - veränderung interner Datenstrukturen - neue Funktionen hinzugeben Bei neuer Hauptversionsnummer kann man beliebige Änderungen machen. 2.) Compilieren einer dynamische Bibliothek Es muss zuerst eine Objektdatei erzeugt werden. Diese muss aber positions unabhängig sein! bei gcc heisst die Option -fPIC (Position Independent Code) bei unserem Beispiel wäre es: gcc -fPIC -Wall -c bibel.c -Wall ... schaltet Warnungen ein -c ... generiere Objektdatei 3.) Generieren der dynamischen Bibliothek Nun muss die .so Datei, die dyn. Bibliothek erzeugt werden. Ich möchte dazu gleich das Beispiel bringen: gcc -shared -Wl,-soname,libbibel.so.1 -o libfehler.so.1.0 fehler.o -lc -shared ... bewirkt, dass eine dyn. Bibliothek erzeugt wird -Wl ... diese Optionen werden nach dem Umwandeln von Beistriche zu Spaces dem Linker übergeben! Hauptversionsnummer muss dabei sein! -o ... Output, so soll die Datei heißen -lc ... Die c-Bibliothek (Achtung wenn c++ verwendet!) 4.) Installieren der Bibliothek Für diesen Vorgang muss man root sein. Kopieren sie die Datei nach /usr/lib bzw. /lib (Wenn für Bootvorgang benötigt) # cp libbibel.so.1 /usr/lib Machen sie einen Symbolischen Link von der aktuellen Version zu einem Namen ohne Versionsnummer. # cd /usr/lib # ln -s libbibel.so.1 libbibel.so Geschafft! Sie müssen nur noch ldconfig ausführen # ldconfig Wollen sie die Bibliothek nicht installieren (wenn sie z.B. kein root Zugang zu diesem System haben) können sie die Enviromentvariable LD_LIBRARY_PATH setzen, dann wird in diesem Pfad nach Bibliotheken gesucht. 5.) Notizen Eventuell sollten sie noch die Headerdateien global verfügbar machen. (in den Ordner /usr/includes hineinkopieren) Wollen sie ihre Bibliothek verwenden, einfach -lbibel beim Kompilieren hinzugeben bsp: gcc -Wall -c meinProgramm.c gcc -o meinProgramm meinProgramm.o -lbibel Dieses Dokument wurde unter der GPL Lizens veröffentlicht.